package com.ysx.controller;

import com.itheima.constant.MessageConstant;
import com.itheima.entity.Result;
import com.itheima.health.pojo.OrderSetting;
import com.ysx.service.OrderSettingService;
import com.ysx.utils.POIUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

@RestController
@RequestMapping("/ordersetting")
public class OrderSettingController {

//    注入OrderSetttingService代理类对象
    @Autowired
    private OrderSettingService orderSettingService;

    /**
     * 上传文件
     * @return
     */
    @RequestMapping("/upload")
    public Result upload(MultipartFile excelFile) {
        Result result=null;
        try {
            List<OrderSetting> oss=new ArrayList<OrderSetting>();
//        调用PoiUtils读取excel数据 返回一个存储字符串数组的list集合
            List<String[]> excelData = POIUtils.readExcel(excelFile);
//        遍历集合
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
            for (String[] excelDatuArr : excelData) {
//        将每一个集合的数组第一个索引和第二个索引封装到OrderSetting对象
                OrderSetting os = new OrderSetting(sdf.parse(excelDatuArr[0]), Integer.parseInt(excelDatuArr[1]));
//         将对象存储到集合
                System.out.println("日期：" + os.getOrderDate() + ",最大预约数量:" + os.getNumber());
                oss.add(os);
            }
//        调用service方法 返回受影响的行数
            int upload = orderSettingService.upload(oss);
//            根据受影响行数不同封装对象
            if(upload>0){
                result=new Result(true, MessageConstant.UPLOAD_SUCCESS);
            }else {
                result=new Result(false, MessageConstant.UPLOAD_FAIL);
            }
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            result=new Result(false,"数据库中已预约的数量大于修改可预约数量 不可修改！！！");
            return result;
        }
    }


    /**
     * 根据当前年月查询预约的人数
     */
    @RequestMapping("/getOrderSettingByMonth")
    public Result findOrderSettingByMonth(String date) {
        Result result=null;
        System.out.println("接受到前端返回的年月:"+date);
//        调用service层 传入date日期 返回一个List集合
       List<OrderSetting>  list=orderSettingService.findOrderSettingByMonth(date);
        System.out.println("未封装数据展示:"+Arrays.toString(list.toArray()));
//        根据返回结果 封装对象
        if(list!=null){
            //        将当前的集合遍历 重新封装到Map集合 返回给前端
            List<Map> newList=new ArrayList<Map>();
            //        遍历
            for (OrderSetting orderSetting : list) {
                Map map = new HashMap();
                map.put("date",orderSetting.getOrderDate().getDate());
                map.put("number",orderSetting.getNumber());
                map.put("reservations",orderSetting.getReservations());
            //封装到新的集合
                newList.add(map);
            }
            //        重新封装的集合对象为：
            System.out.println("重新封装的集合对象为\n"+newList);
            result=new Result(true,MessageConstant.QUERY_ORDER_SUCCESS,newList);
        }
        else {
            result=new Result(false,MessageConstant.QUERY_ORDER_FAIL);
        }
        return result;
    }

    /**
     * 修改最大预约数量
     */
    @RequestMapping("/updateMaxNumber")
    public Result updateV(String date,int number) {
        try {
            System.out.println("后台接受到的是number对象：" + number);
            System.out.println("后台接受的date对象:"+date);
//        调用service层 返回受影响的行数
            int updateV=  orderSettingService.updateV(date,number);
            Result result=null;
            if(updateV>0){
                 result=new Result(true,MessageConstant.ORDERSETTING_SUCCESS);
            }else {
                result=new Result(false,MessageConstant.ORDERSETTING_FAIL);
            }
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return new Result(false,"已预约数大于预修改数 无法完成修改！！");
        }
    }

}
